﻿using System;
using System.Linq;
using CTS.Com.Domain.Constants;
using CTS.Com.Domain.Helper;
using CTS.Data.Domain.Dao;
using CTS.W._150101.Models.Domain.Common.Dao;
using CTS.W._150101.Models.Domain.Object.Admin.Photos;
using CTS.Web.Com.Domain.Helper;

namespace CTS.W._150101.Models.Domain.Dao.Admin
{
    /// <summary>
    /// MasterPhotosEntryDao
    /// </summary>
    public class MasterPhotosEntryDao : GenericDao<EntitiesDataContext>
    {
        // Định nghĩa hằng file sql
        public const string MASTERPHOTOSENTRYDAO_GETINFO_SQL = "MasterPhotosEntryDao_GetInfo.sql";

        /// <summary>
        /// Lấy thông tin ảnh
        /// </summary>
        public PhotoObject GetInfo(string localeCd, string photoCd)
        {
            // Tạo tham số
            var param = new {
                LocaleCd = localeCd,
                PhotoCd = photoCd
            };
            // Kết quả trả về
            return GetObjectByFile<PhotoObject>(MASTERPHOTOSENTRYDAO_GETINFO_SQL, param);
        }

        /// <summary>
        /// Kiểm tra tồn tại ảnh
        /// </summary>
        public bool IsExist(string localeCd, string photoCd)
        {
            var linq = from tbl in EntityManager.MAPhotos
                       where tbl.LocaleCd == localeCd
                       && tbl.PhotoCd == photoCd
                       select tbl;
            var count = linq.Count();
            return count == decimal.One;
        }

        /// <summary>
        /// Kiểm tra tồn tại tên ảnh
        /// </summary>
        public bool IsUnique(string photoCd, string photoSearchName)
        {
            var linq = from tbl in EntityManager.MAPhotos
                       where tbl.PhotoCd != photoCd
                       && tbl.PhotoSearchName == photoSearchName
                       select tbl;
            var count = linq.Count();
            return count != decimal.One;
        }

        /// <summary>
        /// Thêm ảnh
        /// </summary>
        public void Insert(PhotoObject data)
        {
            var entity = GetMAPhoto(data);
            entity.LocaleCd = Logics.LOCALE_DEFAULT;
            entity.VersionNo = decimal.One;
            entity.CreateUser = WebContextHelper.UserName;
            entity.CreateDate = DateTime.Now;
            entity.UpdateUser = WebContextHelper.UserName;
            entity.UpdateDate = DateTime.Now;
            EntityManager.MAPhotos.InsertOnSubmit(entity);
        }

        /// <summary>
        /// Cập nhật ảnh
        /// </summary>
        public void Update(PhotoObject data)
        {
            var linq = from tbl in EntityManager.MAPhotos
                       where tbl.LocaleCd == data.LocaleCd
                       && tbl.PhotoCd == data.PhotoCd
                       select tbl;
            var entity = linq.Single();
            // Cập nhật thông tin
            if (!DataCheckHelper.IsNull(data.PhotoName)) {
                entity.PhotoName = data.PhotoName;
            }
            if (!DataCheckHelper.IsNull(data.PhotoSearchName)) {
                entity.PhotoSearchName = data.PhotoSearchName;
            }
            if (!DataCheckHelper.IsNull(data.FileCd)) {
                entity.FileCd = data.FileCd;
            }
            if (!DataCheckHelper.IsNull(data.SortKey)) {
                entity.SortKey = data.SortKey;
            }
            if (!DataCheckHelper.IsNull(data.DeleteFlag)) {
                entity.DeleteFlag = data.DeleteFlag;
            }
            entity.VersionNo = entity.VersionNo + decimal.One;
            entity.UpdateUser = WebContextHelper.UserName;
            entity.UpdateDate = DateTime.Now;
        }

        /// <summary>
        /// Khởi tạo đối tượng ảnh
        /// </summary>
        public MAPhoto GetMAPhoto(PhotoObject data)
        {
            // Khởi tạo biến cục bộ
            var result = DataHelper.CopyObject<MAPhoto>(data);
            // Kết quả trả về
            return result;
        }
    }
}
